const install = (Vue, vm) => {
  // 此为自定义配置参数，具体参数见上方说明
  Vue.prototype.$u.http.setConfig({
    baseUrl: global.reqHeard,
    loadingMask: true,
    originalData: true,
  });

  // 请求拦截部分，如配置，每次请求前都会执行
  Vue.prototype.$u.http.interceptor.request = (config) => {
    config.header.Authorization = uni.getStorageSync('token');
    config.header.LoginEntryType = 'mobile';
    // 可以对某个url进行特别处理，此url参数为this.$u.get(url)中的url值
    // if (config.url == '/user/login') config.header.noToken = true;

    return config;
    // 如果return一个false值，则会取消本次请求
    // if(config.url == '/user/rest') return false; // 取消某次请求
  };

  Vue.prototype.$u.http.interceptor.response = (res) => {
    uni.hideLoading();
    console.log(res, 'Vue.prototype.$u.http.interceptor.response');
    if (res.errMsg.indexOf('timeout') > -1) {
      uni.showToast({
        icon: 'none',
        title: '网络异常，请确认是否提交成功',
        duration: 1500,
      });
    }

    if (res.refreshedtoken) {
      console.log(res.refreshedtoken);
      uni.setStorage({
        key: 'token',
        data: res.refreshedtoken,
      });
      console.log(uni.getStorageSync('token'), 'token');
    }

    if (res.data.status == 0) {
      // res为服务端返回值，可能有code，result等字段
      // 这里对res.result进行返回，将会在this.$u.post(url).then(res => {})的then回调中的res的到
      // 如果配置了originalData为true，请留意这里的返回值
      if (res.refreshedtoken) {
        uni.setStorage({
          key: 'token',
          data: res.refreshedtoken,
        });
        console.log(uni.getStorageSync('token'), 'token');
      }
      return res.data;
    } else if (res.data.status == 401) {
      uni.reLaunch({
        url: '/pages/login/index',
      });
    } else {
      if (res.message) {
        // vm.$u.toast(res.message);
        uni.showToast({
          mask: true,
          icon: 'none',
          title: res.message,
          duration: 3000,
        });
      } else {
        // vm.$u.toast(res.data.message);
        uni.showToast({
          mask: true,
          icon: 'none',
          title: res.data.message,
          duration: 3000,
        });
      }
      // 如果返回false，则会调用Promise的reject回调，
      // 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中，res为服务端的返回值
      return false;
    }
  };
};

export default {
  install,
};
